package com.tiancheng.trade.commom.web.model.request;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
public class PaypalCreateDTO implements Serializable {
    //税费
    private Integer tax;
    // 实收金额
    private Integer amount;
    // 应收金额
    private Integer orderAmount;

    private String description;
    //支付订单创建成功跳转链接
    private String successUrl;

    private String failUrl;
    //取消支付订单创建跳转链接
    private String cancelUrl;
    // 订单号
    @NotEmpty
    private String orderId;
    // 用户手机号
    private String userTel;
    // 支付渠道 paypal
    @NotEmpty
    private String payChannel;
    // 支付方式 paypal
    @NotNull
    private String payWay;
    // 微信公众号/小程序支付时用户标识
    private String openid;
    // 移动端微信appid或微信公众号appid等的标识字段
    private String subAppId;
    // 支付场景  支付场景（app/miniapp/H5/wxapp/pcweb/face-swiping/scan）
    @NotEmpty
    private String payScene;
    // 移动端请求头信息
    private String appType;

    private String appVersion;
    // 时间戳，精确到秒
    private Long ts;
    // 用户ID
    @NotEmpty
    private String uid;
    //支付订单号
    @NotNull
    private String paymentId;
    //业务类型
    @NotNull
    private String businessType;
    //订单名称
    @NotEmpty
    private String orderName;
    //主商户编码
    @NotEmpty
    private String merchantCode;
    //主商户名称
    @NotEmpty
    private String merchantName;
    /**
     * 币种
     */
    private String currency;
    //子订单信息
    @Valid
    @NotEmpty
    private List<SubOrderPaypalDTO> subPaypalOrders;

    @Data
    public static class SubOrderPaypalDTO {
        // 商户编码
        private String merchantCode;
        // 商户名称
        private String merchantName;
        // 产品编号
        private String productCode;
        // 交易中台产品id
        private String productId;
        // 产品名称
        private String productName;
        // 产品详细
        private String productDetail;
        // 数量
        private Integer productCount;
        // 子订单应付金额
        private Integer orderAmount;
        // 子订单实付金额
        private Integer amount;
        // 子订单编号
        private String subOrderId;
    }
}
